
/***
 全局公共方法调用
 */


/***
 * 把一维数组 ， 通过 id 与 parentId ,组装成树形结构
 * @param items  Array
 * @param key  String:对象绑定的id 键值名
 * @param parentKey  String:对象绑定的parentId 键值名
 * @returns {[]}
 */

export function arrayToTree(arrays , key , parentKey) {
    //判断拿到的数据是否是数组，如果值是Array，则为true; 否则为false。
    if (!Array.isArray(arrays)) {
        return []
    }
    //深拷贝，否则会影响原数组
    let node = JSON.parse(JSON.stringify(arrays))
    //根据父节点进行拼接子节点，先判断里面是否有子节点，如果已经有的话，先删了
    node.forEach(item => delete item.children)
    let map = {}
    let newNode = []
    //把每一项的引用放入map对象里
    node.forEach(item => map[item[key]] = item)
    node.forEach(dt => {
        let parents = map[dt[parentKey]]
        if (parents) {
            ((parents.children) || (parents.children = [])).push(dt)
        } else {
            newNode.push(dt)
        }
    })
    return newNode
}

/***
 * 把两个对象，进行属性的深度合并
 * @param target
 * @param sources
 * @returns {*}
 */
export function deepMerge (target, ...sources) {
    if (!sources.length) return target;
    const source = sources.shift();

    if (isObject(target) && isObject(source)) {
        for (const key in source) {
            if (isObject(source[key])) {
                if (!target[key]) Object.assign(target, { [key]: {} });
                deepMerge(target[key], source[key]);
            } else {
                Object.assign(target, { [key]: source[key] });
            }
        }
    }
    return deepMerge(target, ...sources);
}
